package gestores;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;

import utilidades.EnvioEmail;
import clasesBasicas.Usuario;

public class SistemaUsuarios {
	
	
	
	private Connection conexion;
	private Usuario usuarioActual;
	
	public SistemaUsuarios()
	{
		//se hará una descarga de los datos de los usuarios del servidor
		obtenerConexion();
		
		
	}
	
//	private void obtenerUsuarios() {
//		
//		String sql="SELECT * FROM USUARIO";
//		
//	        ResultSet resultado = null; 
//	        try { 
//	            Statement sentencia; 
//	            sentencia = getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); 
//	            resultado = sentencia.executeQuery(sql); 
//	             
//	        } catch (SQLException e) { 
//	            e.printStackTrace(); 
//	        } 
//	        
//	        try {
//					while(resultado.next())
//					{
//						System.out.println(resultado.getInt(1)+"-----"+resultado.getString(2)+"-----"+resultado.getString(3));
//					}
//			} catch (SQLException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
//	        
//	} 
	
	private void obtenerConexion()
	{
		//System.out.println("AQUIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII");
		try { 
	        Class.forName("oracle.jdbc.OracleDriver"); 
	        //String BaseDeDatos = "jdbc:oracle:thin:@10.166.54.214:1521:XE";
	        
	        //String BaseDeDatos = "jdbc:oracle:thin:@bdprog4.no-ip.org:1521:XE";
	        String BaseDeDatos = "jdbc:oracle:thin:@10.172.106.117:1521:XE";
	        System.out.println("paso1");
	        conexion = DriverManager.getConnection(BaseDeDatos, "admin","admin"); 
	        System.out.println("paso2");
	        if (conexion != null) { 
	            System.out.println("----------------Conexion exitosa!-------------------"); 
	        } else { 
	            System.out.println("Conexion fallida!"); 
	        } 
	    } catch (Exception e) { 
	        e.printStackTrace(); 
	    }
	}
	
	public Connection getConexion() { 
	    return conexion; 
	}
	
	

	private int existeUsuario(String id_usuario,String contraseña) throws SQLException
	{
		// 1 significa que existe ese usuario y la contraseña es correcta
		//-1 significa que existe ese usuario, pero que la contraseña es incorrecta
		//0 el usuario no existe
		
		String consulta="SELECT * FROM USUARIO WHERE ID_USUARIO=?";
		
		ResultSet respuesta=realizarConsultaUsuario(consulta,id_usuario);
		//Podríamos utilizar un metodo para encriptar la contraseña, de manera que sea más seguro
		if(respuesta.next())
		{
			if((respuesta.getString("CONTRASENA")).equals(contraseña))
			{
				Usuario u=new Usuario(respuesta.getInt("DNI"), respuesta.getString("NOMBRE"), respuesta.getString("APELLIDOS"), respuesta.getString("ID_USUARIO"), respuesta.getString("CONTRASENA"),respuesta.getString("EMAIL"),respuesta.getInt("DINERO_ACTUAL"),respuesta.getInt("NIVEL_ACTUAL"),respuesta.getString("PREGUNTA_SECRETA"),respuesta.getString("RESPUESTA_SECRETA"));
				usuarioActual=u;
				respuesta.close();
				return 1;
				
			}
			else
			{
				respuesta.close();
				return -1;
			}
		}
		else
		{
		respuesta.close();
		return 0;
		}
	}
	
	private ResultSet realizarConsultaUsuario(String consulta, String id) {
		
		String sql=consulta;
		
	        ResultSet resultado = null; 
	        PreparedStatement sentencia=null;
	        try { 
	            sentencia=conexion.prepareStatement(sql);
	            sentencia.setString(1, id);
	            //sentencia.setString(2, contraseña);
	            //sentencia = getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); 
	            resultado = sentencia.executeQuery();
	             
	        } catch (SQLException e) { 
	            e.printStackTrace(); 
	        } 
	        
	        //cierres
	        
	        
	        return resultado;
	}

	private boolean existeUsuarioReg(String id_usuario, int dni)
	{
		String sql="SELECT * FROM USUARIO WHERE ID_USUARIO='"+id_usuario+"' AND DNI="+dni;
		System.out.println(sql+"\n");
		ResultSet resultado = null; 
		Statement sentencia= null;
        try {  
            sentencia = getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); 
            resultado = sentencia.executeQuery(sql); 
             
        } catch (SQLException e) { 
            e.printStackTrace(); 
        }
        
        boolean res= false;
        try {
			res=resultado.next();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace(); //avisar de que ha habido un error
		}
        
        //cierres
        try {
			resultado.close();
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
        try {
			sentencia.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        
        return res; //true- existe usuario y false- no existe
        
	}
	
	private void añadirUsuario(Usuario u)
	{
		//a la hora de añadir un usuario, enviar un email de confirmación
		String sql="INSERT INTO USUARIO VALUES ("+u.getDni()+",'"+u.getNombre()+"','"+u.getApellidos()+"','"+u.getId_usuario()+"',"
				+ "'"+u.getContraseña()+"','"+u.getEmail()+"',"+u.getDineroActual()+","+u.getNivelActual()+",'"+u.getPregSecreta()+"','"+u.getRespSecreta()+"')";
		
		int resultado=0;
		System.out.println(sql+"\n");
		Statement sentencia= null;
        try {  
            sentencia = getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); 
            resultado = sentencia.executeUpdate(sql); 
             
        } catch (SQLException e) { 
            e.printStackTrace(); 
        }
        
        if(resultado!=0)
        {
        	//JOption panel de confirmación
        	EnvioEmail eE= new EnvioEmail();
    		eE.send("programatrading@gmail.com", "guachupo69", "smtp.gmail.com", "465", u.getEmail(), "¡Bienvenido a IbexTrading!", "¡Hola "+u.getId_usuario()+"! \n ¡Bienvenido a el programa trading lider del mercado! \n \n Gracias por probar nuestro programa y esperamos que aprenda mucho. \n Si tiene alguna duda, no dude en contactar con programatrading@gmail.com.\n \n Un saludo, \n El equipo de IbexTrading.");
        	
        }
        else
        {
        	//No se ha podido crear el usuario
        	System.out.println("No se ha creado el usuario.");
        }
        usuarioActual=u;
		
		
	}
	
	private void eliminarUsuario()
	{
		//el usuario a eliminar es el actual
		if(usuarioActual!=null)
		{
		Usuario uEliminar=usuarioActual;
		//la consulta
		String sql="DELETE FROM USUARIO WHERE DNI="+uEliminar.getDni()+";";
		
		//usuario actual a null
		usuarioActual=null;
		
		Statement sentencia= null;
		int resultado=0;
        try {  
            sentencia = getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); 
            resultado = sentencia.executeUpdate(sql); 
            // JOption panel de confirmación
             
        } catch (SQLException e) { 
            e.printStackTrace(); 
            //JOptionpanel de denegación
        }
		}
        
	}
	
	public static void main(String[]args) 
	{
		SistemaUsuarios sU= new SistemaUsuarios();
		//sU.añadirUsuario(new Usuario(12345600, "Evo", "Morales", "evonis", "guachu", "kcifuentes4a@gmail.com", 1000, 0, "¿Eres sudaca?", "Puede ser"));
		//System.out.println("conseguido");
		//System.out.println(sU.existeNick("evonis"));
		//sU.mostrarTabla("USUARIO");
		try {
			System.out.println(sU.existeUsuario("evonis", "guachu"));
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void mostrarTabla(String tabla)
	{
		String sql="SELECT * FROM "+tabla;
		ResultSet resultado=null;
		Statement sentencia=null;
		 try {  
	            sentencia = getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); 
	            resultado = sentencia.executeQuery(sql); 
	             
	        } catch (SQLException e) { 
	            e.printStackTrace(); 
	        }
		 
		 try {
			 System.out.println("aqui");
			while(resultado.next())
			 {
				
				 System.out.println(resultado.getString("CONTRASENA"));
				 
			 
			 }
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
